/*
 * =======================================================================================变量定义区
 */
var clickAdd;
var clickEdit;
var indexId;
var divList;
var typeValue;
var optDivInput;
var defultValue;
var maxId=100 ;
var count = 0;
var optionIndex = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
/*
 * =======================================================================================页面初始化函数
 */
$(function()
{
	//增加问题和编辑问题里的取消按钮的点击事件
	$("#divModelAddQuestion_cancel").bind('click',function()
		{
			cancelButton();
		});
	//问题编辑主页面的取消按钮的点击事件
	$("#cancel").bind('click',function()
		{
			cancel();
		});
	//选项的失去焦点事件
	$("#divModelAddQuestion_options").find("input[name=optionText]").bind('blur', function()
		{
			optionLoseFocus();
		});
	//点击选项事件
	$("#divModelAddQuestion_options").find("b").bind('click', function()
		{
			clickOption();
		});
	//增加选项按钮的点击事件
	$("#addOption").bind('click', function()
		{
			addOption();
		});
	//选项类型的改变事件
	$('input:radio[name=questionType]').bind('change', function()
		{
			typeChange();
		});
	//增加问题和编辑问题的确定按钮的点击事件
	$("#divModelAddQuestion_save").bind('click', function()
		{
			saveQuestion();
		});
	//保存按钮的点击事件
	$("#save_question").bind('click', function()
		{
			save();
		});
});
/*
 * =======================================================================================函数定义区
 */
/**
 * 增加问题和编辑问题里的取消按钮的点击事件
 */
function cancelButton()
{
	$("#divMask").attr("style","display:none;");
	$("#divModelAddQuestion").attr("style","display:none;");	
	clickAdd = null;
	clickEdit = null;
}
/**
 * 问题编辑主页面的取消按钮的点击事件
 */
function cancel()
{
	openConfirm('确定要取消吗？', null, function() 
	{
		$("#submitcurrentpage").submit();
	});
}
/**
 * 选项内容失去焦点时，文本框变为html
 */
function optionLoseFocus()
{
	if(checkStringLength($(this).val().trim()) > 100)
	{
		openAlert("选项内容不能超过100个字符！");
		return;
	}
	else
	{
		$(this).hide();
		var b = $(this).parent().find("b").show();
		b.text($(this).val());
		b.show();
	}
}

/**
 * 点击选项时,选项变为文本框
 */
function clickOption()
{
	$(this).hide();
	var text = $(this).parent().find("input[name=optionText]");	
	text.attr("type","text");
	text.val($(this).text());
}

/**
 * 增加选项的点击事件
 */
function addOption()
{
	var editText = $("<input type='text' name='optionText'/>");
	var divOption = $("<div class='question-option'></div>");
	var bText  =  $("<b name='optionb'  style='cursor: pointer;'><b/>");
	$("#divModelAddQuestion_options").append(divOption.append(editText).append(bText));	
	editText.focus();
	editText.bind('blur',function()
	{ 
		if(editText.val().trim().length == 0)
		{
			divOption.remove();
		}
		else
		{
			if(checkStringLength($(this).val().trim()) > 100)
			{
				openAlert("选项内容不能超过100个字符！");
				return;
			}
			else
			{
				editText.hide();
				bText.html(editText.val());
				bText.show();
			}
		}
	});
	bText.click(function()
		{ 					
			bText.hide();
			editText.val(bText.html());
			editText.show();
			editText.focus();
		});
}

/**
 * 问题类型的改变事件
 */
function typeChange()
{
	typeValue = $('input:radio[name=questionType]:checked').val();
	switch(typeValue){
	case "1":
	case "2":
		$("#divModelAddQuestion_optionSet").show() ;
		$("#divModelAddQuestion_options").show();
		$("#divModelAddQuestion_quality").hide();
		$("#divModelAddQuestion_yn").hide();
		break;
	case "3":
	case "4":
		$("#divModelAddQuestion_optionSet").hide() ;
		$("#divModelAddQuestion_options").hide();
		$("#divModelAddQuestion_quality").hide();
		$("#divModelAddQuestion_yn").hide();
		break;
	case "5":
		$("#divModelAddQuestion_optionSet").hide() ;
		$("#divModelAddQuestion_options").hide();
		$("#divModelAddQuestion_quality").show();		
		$("#divModelAddQuestion_yn").hide();
		break;
	case "6":
		$("#divModelAddQuestion_optionSet").hide() ;
		$("#divModelAddQuestion_options").hide();
		$("#divModelAddQuestion_quality").hide();		
		$("#divModelAddQuestion_yn").show();
		break;
	default:
		break;
	} 
}
/**
 * 增加问题和编辑问题的确定按钮的点击事件
 * @returns {Boolean}
 */
function saveQuestion(){
	// validate
	var question = $("#divModelAddQuestion_questionContent").val();
	var opContent = "";
	if(question=="请输入问题内容"|| question==""||question==null|| question.length == 0)
	{
		openAlert('请输入问题内容！');
		return false;
	}
	
	if(question==""||question==null|| checkStringLength(question) > 200)
	{
		openAlert('问题内容不能超过200个字符！');
		return false;
	}
	
	var type = $('input:radio[name=questionType]:checked').val();
	var qsType ="";
	
	switch(type){
	case "1":
		qsType = "单选";
	case "2":
		var options = $("#divModelAddQuestion_options");
		var optionsDiv = options.find("div");
		if(optionsDiv.length < 2)//问题选项小于2时
		{
			openAlert('单选或多选类型至少设置两个选项！');
			return false;
		}
 
		if(type=="2"){
			qsType = "多选";
		}
		
		for(var i = 0;i<optionsDiv.length;i++)
		{
			var opt = optionsDiv[i];
			var optText = $(opt).find("input").val();
				
			if(optText!=null&&optText!="")
			{
				opContent = opContent +"<div class='question-option'  >"+optionIndex[i]+"."+optText
					+"<input name='questionList["+maxId+"].questionOptionList["+i+"].optionValue' type='hidden' value='"+optionIndex[i]+"'/>"
					+"<input name='questionList["+maxId+"].questionOptionList["+i+"].optionName' type='hidden' value='"+optText+"'/>"
					+"</div>";
			}	
		}
		break;
	case "3":
		qsType = "文本框";
	case "4":		
		if(type=="4")
		{
			qsType = "文本域";
		}
		break;
	case "5":
		 
			var optionInput = $("#divModelAddQuestion_quality").find("input");
			var optMin = optionInput[0].value;
			var optMax = optionInput[1].value;
			if((optMin==""||optMin==null)||(optMax==""||optMax==null))
			{
				openAlert("最大值和最小值不能为空！");
				return false;
			}
			
			if(isNaN(optMin)||isNaN(optMax))
			{
				openAlert("最大值和最小值只能键入数字！");
				return false;
			}
			
			var max = parseFloat(optMax);
			var min = parseFloat(optMin);
			if(optMax!=""&&optMax!=null&&optMin!=""&&optMin!=null)
			{
				if(min>=max)
				{
					openAlert("最大值必须大于最小值!");
					return false;
				}
				
				if(optMax.indexOf(".")!=-1||optMin.indexOf(".")!=-1)
				{
					openAlert("输入的数字必须为整数!");
					return false;
				}
				
				if(optMax.length+optMin.length>127)
				{
					openAlert("数字不能大于127位!");
					return false;
				}
				
			}
			opContent = "<div class='question-option' >"+"(最小值,最大值)("+min+","+max+")<input name='questionList["+maxId+"].validateRule' type='hidden' value='"+min+","+max+"'/></div>";
		qsType = "数字";
		break;
	case "6":
		var inputYN = $("#divModelAddQuestion_yn").find("input");
		if(inputYN[0].checked)
		{
			opContent = "<div class='question-option'>默认值：Y</div><input type='hidden' name='typeYN' value='Y'/><input name='questionList["+maxId+"].validateRule' type='hidden' value='Y'/>";
		}
		else
		{
			opContent = "<div class='question-option'>默认值：N</div><input type='hidden' name='typeYN' value='N'/><input name='questionList["+maxId+"].validateRule' type='hidden' value='N'/>";
		}
		qsType = "YN";
		break;
	default:
		break;
	}
	
	//组装 html 并返回
	var addbutton = "<div style='text-align:right;'><div class='toolButton' onClick='addQuestion(this);' id='ad_"+maxId+"'>增加问题</div></div>";
	var content = "<div id='qs_"+maxId+"'>" + addbutton
				+ "<div class='question-content' style='padding-left:2px;'>"
				+"<div class='toolButton'   onClick='editQuestion(qs_"+maxId+");' style='min-width: 30px;'>Edit</div><div class='toolButton' onClick='delQuestion(qs_"+maxId+");' style='min-width: 30px;'>Del</div> "
				+"<input type='hidden' name='questionList["+maxId+"].questionOrder' />"
				+question+"<input type='hidden' name='questionList["+maxId+"].questionContent' value='"+question+"'/>";
				content=content+"("+qsType+"<input name='questionList["+maxId+"].questionType' type='hidden' value='"+type+"'/>)";
				content=content+"</div>"+opContent+"<hr class='question-separator'></hr></div>";
	//增加问题区域放置位置
	if(clickAdd != undefined && clickAdd != null)
	{
		if(clickAdd == "ad_last")
		{
			$("#"+clickAdd).parent().before(content);
		}
		else
		{
			$("#"+clickAdd).parents("div[id^='qs_']").before(content);
		}
	}

	if(clickEdit != undefined && clickEdit != null)
	{
		$(clickEdit).replaceWith(content);
	}
	maxId +=1;
	$("#divMask").attr("style","display:none;");
	$("#divModelAddQuestion").attr("style","display:none;");	 
	clickAdd = null;
	clickEdit = null;
}

/**
 * 问题编辑保存按钮的点击事件
 */
function save()
{
	divList = $("div[id^='qs_']");
	
	if(divList == undefined || divList == null || 
			divList.length == 0)//问卷下没有问题时
	{
		openAlert("请给问卷增加问题!");
		return false;
	}
	
	//给qestionOrder赋值
	for(var i=0 ; i<divList.length;i++)
	{	
		var divObj = divList[i];
		$(divObj).find("input[name$=questionOrder]").val(i+1);
	}
	//ajax提交表格到controller
	$.ajax(
			{
				type: "POST",
				url: BASE_PATH + "/survey/surveyManagement/surveyDesign/saveQuestion.do",
		        data: $("#questionForm").serialize(),
		        dataType: "json", 
		        success : function(data)
		        {
		        	if(data=="success")
		            {
		            	openAlert('保存成功',function()
		            	{
		            		$("#submitcurrentpage").submit();
		            	});
		            }
		            else
		            {
		            	openAlert("保存失败");
		            }
				},
				error: function(e)
				{
					openAlert("操作失败！错误信息：<div>"+e.responseText+"</div>");
		        },
		    });
}


function addQuestion(o)
{
	$("#divMask").attr("style","display:block;");
	$("#divModelAddQuestion").attr("style","display:block;");
	
	clickAdd = $(o).attr("id");
	indexId = $(o).attr("id").split('_')[1];

	//init component
	$("input:radio[name=questionType][value=1]").attr("checked",true);	
	$("#hhh").empty().append("增加问题");
	$("#divModelAddQuestion_questionContent").val('请输入问题内容');
	$("#divModelAddQuestion_options").empty();
	$("#maxRule").val("0");
	$("#minRule").val("0");
	$("#divModelAddQuestion_yn").find("input[name=optionText][value=Y]").attr("checked",true);
	$("#divModelAddQuestion_yn").find("input[name=optionText][value=N]").attr("checked",false);
	
	typeChange();	 
}

/**
 * 编辑问题按钮的点击事件
 * @param divId 问题所在div的id

/**
 * 编辑问题按钮的点击事件
 * @param divId 问题所在div的id
 */
function editQuestion(divId)
{
	$("#divMask").attr("style","display:block;");
	$("#divModelAddQuestion").attr("style","display:block;");
	
	clickEdit = divId;
	var qsDiv = $(divId);
	var qType = qsDiv.find("input[name$=questionType]").val();
	var quesContent = qsDiv.find("input[name$=questionContent]").val();
		
	//init component
	$("input:radio[name=questionType][value="+qType+"]").attr("checked",true);	
	$("#divModelAddQuestion_questionContent").val(quesContent);
	$("#divModelAddQuestion_options").empty();
	$("#maxRule").val("0");
	$("#minRule").val("0");
	$("#divModelAddQuestion_yn").find("input[name=optionText][value=Y]").attr("checked",true);
	$("#divModelAddQuestion_yn").find("input[name=optionText][value=N]").attr("checked",false);
	$("#hhh").empty().append("编辑问题");
	
	typeChange();
	
	switch(qType){
	case "1":
	case "2":
		var optionDiv = qsDiv.find("input[name$=optionName]");
		
		for(var i=0 ; i<optionDiv.length;i++)
		{
			var v = $(optionDiv[i]).val();
			$("#divModelAddQuestion_options").append("<div class='question-option'><input type='text' name='optionText' value='"+v+"' onblur='textBlur(this)'/><b style='cursor: pointer;' name='optionb'></b></div>");
		}
		break;
	case "3":
	case "4":
		break;
	case "5":
		//给最大最小值赋值
		var validateRule = qsDiv.find("input[name$=validateRule]");
		var rule=validateRule[0].value.split(",");
		$("#maxRule").val(rule[1]);
		$("#minRule").val(rule[0]);		
		break;
	case "6":		
		var typeYN = qsDiv.find("input[name=typeYN]").val();		
		if(typeYN=='Y')
		{
			$("#divModelAddQuestion_yn").find("input[name=optionText][value=Y]").attr("checked",true);
		}
		else
		{
			$("#divModelAddQuestion_yn").find("input[name=optionText][value=N]").attr("checked",true);
		}
		break;
	default:
		break;
	} 
}

/**
 * 删除问题
 * @param divId 问题所在div的id
 */
function delQuestion(divId)
{
	openConfirm('确定要删除吗？', null, function()
	{
		$(divId).remove();
	});
}

/**
 * 选项失去焦点
 * @param o 失去焦点选项
 */
function textBlur(o)
{
	var content = $(o).val();
	if(content == undefined || content.trim().length == 0)
	{
		$(o).parent().remove();
	}
	else
	{
		if($(this).val().trim().length > 100)
		{
			openAlert("选项内容不能超过100个字符！");
			return;
		}
		else
		{
			var b = $(o).parent().find("b");
			$(b).text(content);
			$(o).hide();
			$(b).show();
		}
	}
}
/**
 * 问题题目文本域的获得焦点事件
 * @param o 获得焦点的文本域
 */
function textareaOnfocus(o)
{
	defultValue = "请输入问题内容";
	if($(o).val() == defultValue)
	{
		$(o).val('');
	}	
}
/**
 * 问题题目文本域失去焦点事件
 * @param o 失去焦点的文本域
 */
function textareaOnblur(o)
{
	defultValue = "请输入问题内容";
	if($(o).val() == "" || $(o).val().trim().length == 0)
	{
		$(o).val(defultValue);
	}	
}
/**
 * 获取输入字符串的unicode长度
 * @param name 输入字符串
 * @returns {Number} 字符串的unicode长度
 */
function checkStringLength(name)
{
	var totalLength = 0;
	var charCode = 0; 
	for (var i = 0; i < name.length; i++) 
	{ 
		charCode = name.charCodeAt(i); 
		if (charCode < 0x007f) 
		{ 
			totalLength = totalLength + 1; 
		} 
		else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) 
		{ 
			totalLength += 2; 
		}
		else if ((0x0800 <= charCode) && (charCode <= 0xffff))
		{ 
			totalLength += 3; 
		} 
	} 
	return totalLength;
}
